package com.zhuiyun.project.api.system.user.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhuiyun.project.api.system.role.entity.SysRole;
import com.zhuiyun.project.common.entity.BaseEntity;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;

/**
 *
 * @ClassName SysUser
 * @Description 系统用户
 * @Author zcy
 * @Date 2023/3/24 15:43
 **/
@Data
public class SysUser extends BaseEntity {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Integer id;


    /**
     * 用户名
     */
    private String userName;
    /**
     * 登录名
     */
    private String loginName;
    /**
     * 登录名
     */
    private String password;
    /**
     * 电话
     */
    private String phone;
    /**
     * 邮箱
     */
    private String email;

    /**
     * 用户性别（0男 1女 2未知）
     */
    private String sex;

    /**
     * 头像id
     */
    private String avatarId;

    /**
     * 最后登陆IP
     */
    private String lastLoginIp;
    /**
     * 最后登陆日期
     */
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss" )//DateTimeFormat 是入参格式化；
    private Date lastLoginTime;

    /** 角色对象 */
    @Transient
    private List<SysRole> roles;

    /** 角色组 */
    @Transient
    private Long[] roleIds;

    /** 角色ID */
    @Transient
    private Long roleId;

    /** 删除标志（0代表存在 2代表删除） */
    private String delFlag;

    /** 帐号状态（0正常 1停用） */
    private String status;

    public SysUser(Integer id)
    {
        this.id = id;
    }

    public SysUser() {

    }


    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
    public String getPhone()
    {
        return phone;
    }

    public Integer getId()
    {
        return id;
    }
    @Transient
    public boolean isAdmin() {
        return isAdmin(this.id);
    }

    @Transient
    public static boolean isAdmin(Integer id) {
        return id != null && 1L == id;
    }


    /**
     * 用户信息
     */
    private SysUser user;
    public SysUser getUser()
    {
        return user;
    }

}
